package org.example.myleet.p389;

public class Solution {

    /**
     * 1 ms
     * 使用异或运算，因为s与t只有1个字母不同，所以s与t除了那1个不同的字母，其余全部通过异或运算抵消
     * 关于异或运算有下面几个规
     * a^a=0; 任何数字和自己异或都是0
     * a^0=a; 任何数字和0异或还是他自己
     * a^b^a=a^a^b; 异或运算具有交换律
     */
    public char findTheDifference(String s, String t) {
        char result = 0;
        char[] concatenation = s.concat(t).toCharArray();
        for (char c : concatenation) {
            result = (char) (result ^ c);
        }
        return result;
    }

    /**
     * 2 ms
     * 纯统计的方式
     */
//    public char findTheDifference(String s, String t) {
//        short[] sCount = new short[26];
//        short[] tCount = new short[26];
//        for (short i=0;i<s.length();i++) {
//            ++sCount[s.charAt(i)-'a'];
//            ++tCount[t.charAt(i)-'a'];
//        }
//        ++tCount[t.charAt(t.length()-1)-'a'];
//        for (short i=0;i<26;i++) {
//            if (sCount[i] != tCount[i]) {
//                return (char)('a'+i);
//            }
//        }
//        return 'a';
//    }
}
